home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Day Cry
/
Day Cry CD.bin
/
oh_towns
/
taropyon
/
splib
/
splib.lzh
/
PRG
/
ZNSPLAY
/
ZNSPLAY.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-09-19
|
14KB
|
613 lines
/*************************************************************************
* UGOKUZANSU PLAYER on system ügPrideüh version II
*************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <egb.h>
#include <snd.h>
#define _ZNS_MAIN
#include "znsplay.h"
#include "../DLL/BGM/midi.h"
#include <fdl.h>
#include <MNU/mnu010.h> /* âüâjâàü[ÉFÉ▌ÆΦ */
ZNSMOVE_T ZnsMove =
{
ZNS_MODE_MEMORY, /* mode */
0, /* wait */
2, /* expand */
-1, /* type */
"" /* filename */
};
FDL_T *ZnsFdl = NULL; /* âtâ@âCâïâ_âCâAâìâO */
FDL_T *BgmFdl = NULL; /* BGMùpâtâ@âCâïâ_âCâAâìâO */
enum _main_evt
{
_EVT_NOTHING,
_EVT_SIDEWORK,
_EVT_MAIN_EXIT,
_EVT_NUM,
};
/* âVâXâeâÇìsé╔Åεò±ò\Ī */
void zns_dsp_info(void)
{
if ( ZnsMove.filename[0] == '\0' )
{
SYL_clear();
return;
}
char tmp[128];
FS_getFnamPath(tmp,ZnsMove.filename );
DSP_writePage(1);
SYL_puts( C_INFO, "filename:%-12s wait:%2d, display:ü~%d, mode:%s",
tmp,
ZnsMove.wait,
ZnsMove.expand,
ZnsMove.mode == ZNS_MODE_MEMORY ? "memory": "disk"
);
}
/* âüâjâàü[ùpé╠âJâëü[âeü[âuâïÉ▌ÆΦ */
void setMenuCol( MNU_T *mnu )
{
if ( mnu )
{
MNUCOL_TIT(mnu) = C_GRAY0;
MNUCOL_STR(mnu) = C_METAL2;
MNUCOL_BAC(mnu) = C_GRAY0;
MNUCOL_BTN(mnu) = DspCtrl.black;
MNUCOL_PSH(mnu) = C_GRAY1;
MNUCOL_HIL(mnu) = C_GRAY3;
MNUCOL_SHA(mnu) = C_GRAY1;
MNUCOL_IGN(mnu) = C_GRAY1;
}
}
/*************************************************************************
* about ZNSPLAY
*************************************************************************/
int APL_about(int evtNo, EVTSBJ_T *sbj)
{
char ver[32];
sprintf( ver, "%s edition #%s", MAIN_VER, EDITION_NUMBER );
Apl_dlgMsg( 8, 32, ver, _ZNSPLAY_,
"%s %s compiled.\n(C)Copyright 1993, H.Toda & TaroPYON\n",
__DATE__, __TIME__ );
return (_EVT_NOTHING);
}
static UINT get_freemem(void) /* âüâéâèùeù╩é≡Æ▓é╫éΘ */
{
int mx;
UINT sz, fm;
#define TBL_MAX (256)
char *dmy[TBL_MAX];
for ( sz = 0x100000, fm = mx = 0 ; mx < TBL_MAX; ++mx )
{
while ( (dmy[mx] = malloc((size_t)sz)) == NULL )
{ if ( (sz /= 2) < 0x100 )
break;
}
if ( dmy[mx] == NULL )
break;
fm += sz;
}
while ( mx > 0 )
free( dmy[--mx] );
return (fm);
}
/*************************************************************************
* âtâèü[âüâéâèé╠ò\Ī
*************************************************************************/
int APL_freeMem(int evtNo, EVTSBJ_T *sbj)
{
UINT f;
char tmp[32];
f = get_freemem();
GetSizeStr(f,tmp);
DLG_tmpMsgBox (
sbj->ev.mos.fr.x2, sbj->ev.mos.fr.y1,
DspCtrl.black, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
" Free memory size %u (%s) byte(s) ", f, tmp );
return (_EVT_NOTHING);
}
/*************************************************************************
* âTâCâhâÅü[âN
*************************************************************************/
int APL_sidework(int evtNo, EVTSBJ_T *sbj)
{
extern int SideWorkMenu(void);
SideWorkMenu();
return (_EVT_NOTHING);
}
/*************************************************************************
* [SYSTEM]
*************************************************************************/
static int ZNS_system( int evtNo, EVTSBJ_T *sbj )
{
enum _mnu_ar
{ _ABOUT, _FREE, _SIDEWORK, _E_NUM
};
static MNUOBJ_T obj[_E_NUM] =
{
{ MNU_NOR, 'A', "About ZNSPLAY", NULL, 0, APL_about , NULL },
{ MNU_NOR, 'F', "Free memory" , NULL, 0, APL_freeMem , NULL },
{ MNU_NOR, 'S', "Sidework" , NULL, 0, APL_sidework, NULL },
};
MNU_T *mnu;
int x0, y0;
x0 = sbj->ev.mos.fr.x1;
y0 = sbj->ev.mos.fr.y1;
mnu = MNU_open( x0, y0, MNUATT_EXIT, _E_NUM, obj, _SYSTEM_ );
if ( mnu == NULL )
return (EVT_BREAK);
setMenuCol( mnu );
evtNo = MNU_start ( mnu );
MNU_close(mnu);
return (evtNo);
}
/*************************************************************************
* âtâ@âCâïâIü[âvâô
*************************************************************************/
int ZNS_open(void)
{
int ret;
FDL_T *fdl;
char *filename;
DSP_writePage(1);
if ( (fdl = ZnsFdl) == NULL )
{
if ( (fdl = FDL_open(0)) == NULL )
{ /* error */
return (_EVT_NOTHING);
}
FDL_set_title( fdl, _ZNSPLAY_);
FDL_set_wildcard( fdl, ZNS_WILD_ALL );
ZnsFdl = fdl;
}
KBF_clear();
if( (ret = FDL_start( fdl )) == NORMAL )
{
filename = FDL_get_filename(fdl);
if ( *filename == '\0' )
return (_EVT_NOTHING);
} else
return (_EVT_NOTHING);
strcpy( ZnsMove.filename, filename );
zns_dsp_info();
return (_EVT_NOTHING);
}
/*************************************************************************
* ì─É╢
*************************************************************************/
int zns_play( ZNSMOVE_T *znsmove )
{
int i;
char sub[128];
static struct
{ CONST char sub[4];
int typ;
} subtbl[] =
{
{"mov", ZNS_TYP_MOV},
{"v00", ZNS_TYP_V00},
{"v02", ZNS_TYP_V02},
};
FS_getSnam( sub, ZnsMove.filename );
znsmove->type = -1;
for ( i = 0; i < sizeof(subtbl)/sizeof(*subtbl); ++i )
{
if ( strcmpi( sub, subtbl[i].sub) == 0 )
{
znsmove->type = subtbl[i].typ;
break;
}
}
if ( znsmove->type < 0 )
return (ERR);
if ( znsmove->mode == ZNS_MODE_DISK )
{ /* âfâBâXâNì─É╢âéü[âhé┼é═BGM ÆΓÄ~ */
MID_playStop();
}
MOS_COFF();
/* â~âàü[âgë≡Å£ */
int mute;
SND_get_elevol_mute(&mute);
SND_elevol_mute(mute | 3);
switch( znsmove->type )
{
case ZNS_TYP_MOV:
{
zns_play_mov( znsmove );
break;
}
case ZNS_TYP_V00:
case ZNS_TYP_V02:
{
zns_play_v02( znsmove );
break;
}
}
/* â~âàü[âgÉ▌ÆΦ */
SND_elevol_mute(mute & (~3));
return (NORMAL);
}
/*************************************************************************
* ì─É╢
*************************************************************************/
int ZNS_play(void)
{
if ( ZnsMove.filename[0] == '\0' )
return (_EVT_NOTHING);
if ( FS_isFileExist(ZnsMove.filename) != FS_EXIST_FILE )
{ /* File not found */
return (_EVT_NOTHING);
}
zns_play ( &ZnsMove );
return (_EVT_NOTHING);
}
/*************************************************************************
* [MENU]
*************************************************************************/
static int ZNS_menu( int evtNo, EVTSBJ_T *sbj )
{
enum _mnu_ar
{ _MENU_OPEN, _MENU_PLAY, _MENU_NUM
};
static MNUOBJ_T obj[_MENU_NUM] =
{
{ MNU_NOR, 'O', "Open" , NULL, _MENU_OPEN, (int (*)())0, NULL },
{ MNU_NOR, 'P', "Play" , NULL, _MENU_PLAY, (int (*)())0, NULL },
};
MNU_T *mnu;
int x0, y0;
x0 = sbj->ev.mos.fr.x1;
y0 = sbj->ev.mos.fr.y1;
mnu = MNU_open( x0, y0, MNUATT_EXIT, _MENU_NUM, obj, "MENU" );
if ( mnu == NULL )
return (EVT_BREAK);
setMenuCol( mnu );
evtNo = MNU_start ( mnu );
MNU_close(mnu);
switch ( evtNo )
{ case _MENU_OPEN: evtNo = ZNS_open(); break;
case _MENU_PLAY: evtNo = ZNS_play(); break;
}
return (evtNo);
}
/*************************************************************************
* [SETUP]
*************************************************************************/
static int ZNS_setup( int evtNo, EVTSBJ_T *sbj )
{
enum _mnu_ar
{ _MENU_MODE, _MENU_WAIT, _MENU_EXPAND, _MENU_NUM
};
static MNUOBJ_T obj[_MENU_NUM] =
{
{ MNU_STR, 'M', "Mode %s" , NULL, _MENU_MODE , (int (*)())0, NULL },
{ MNU_DIG, 'W', "Wait [%2d]", NULL, _MENU_WAIT , (int (*)())0, NULL },
{ MNU_DIG, 'D', "Display [ü~%d]", NULL, _MENU_EXPAND, (int (*)())0, NULL },
};
MNU_T *mnu;
int x0, y0;
x0 = sbj->ev.mos.fr.x1;
y0 = sbj->ev.mos.fr.y1;
mnu = MNU_open( x0, y0, MNUATT_EXIT, _MENU_NUM, obj, _SETUP_ );
if ( mnu == NULL )
return (EVT_BREAK);
setMenuCol( mnu );
do
{
obj[_MENU_MODE ].para = ZnsMove.mode == ZNS_MODE_MEMORY ? "[memory]" : " [disk]";
obj[_MENU_WAIT ].para = (void *)(ZnsMove.wait);
obj[_MENU_EXPAND].para = (void *)(ZnsMove.expand);